<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>closure闭包</title>
    <script>
        function getName()
        {
            var name ="John";
            console.log(name);
        }
        function display()
        {
            console.log(name);
        }
        display();
    </script>
</head>
<body>
<h3><a href="http://yalishizhude.github.io/2015/09/22/underscore-source/">underscore</a></h3>
<h3><a href="http://www.ido321.com/1641.html">闭包</a></h3>
<p>
    闭包是指有权访问另外一个函数作用域中的变量的函数
</p>
<ul>
    <li>
        1、闭包可以访问当前函数以外的变量  getOuter() 中  getDate是一个闭包，该函数执行时，会形成一个作用域A，A中并没有定义变量date，但它能在父一级作用域中找到该变量的定义。
    </li>
    <li>
        2、即使外部函数已经返回，闭包仍能访问外部函数定义的变量
    </li>
    <li>
        3、闭包可以更新外部变量的值
    </li>
</ul>
<script>
    function getName()
    {
        var name = "Johns";
        function display()
        {
            console.log(name);
        }
        return display();
    }
    var func = getName();
    func;

    function getOuter()
    {
        var date = "815";
        function getDate(str)
        {
            console.log(str+date);
        }
        return getDate('今天是：');
    }
    getOuter();


    function getOuter2()
    {
        var date = "815";
        function getDate(str)
        {
            console.log(str+date); //访问外部的date
        }
        return getDate; //外部函数返回
    }
    var today = getOuter2();
    today('今天是：');
    today('明天不是：');

    function updateCount()
    {
        var count = 0;
        function getCount(val)
        {
            count = val;
            console.log(count);
        }
        return getCount;
    }
    var count = updateCount();
    count(811);
</script>
</body>
</html>